import globals from 'globals'
import pluginJs from '@eslint/js'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'

/** @type {import('eslint').Linter.Config[]} */
export default [
  {
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.es2021,
        ...globals.node,
      },
    },
  },
  pluginJs.configs.recommended,
  ...tseslint.configs.recommended,
  ...pluginVue.configs['flat/essential'],
  {
    files: ['**/*.vue'],
    languageOptions: {
      parser: pluginVue.parser,
      parserOptions: {
        parser: tseslint.parser,
        extraFileExtensions: ['.vue'],
        ecmaFeatures: {
          jsx: true,
        },
      },
    },
  },
  {
    rules: {
      'no-var': 'error', //ES 6 中不允许使用 var
      'no-multiple-empty-lines': ['warn', { max: 1 }], // 空行
      'no-console': 'warn', // 改为警告，而不是基于环境
      'no-debugger': 'warn', // 改为警告，而不是基于环境
      'no-unexpected-multiline': 'error',
      'no-useless-escape': 'off',

      '@typescript-eslint/no-unused-vars': 'error', // 未使用的变量
      '@typescript-eslint/prefer-ts-expect-error': 'error', // 优先使用 ts-expect-error
      '@typescript-eslint/no-explicit-any': 'off', // 不允许使用 any
      '@typescript-eslint/no-non-null-assertion': 'off',
      '@typescript-eslint/no-namespace': 'off',
      '@typescript-eslint/semi': 'off',

      'vue/multi-word-component-names': 'off',
      'vue/script-setup-uses-vars': 'error',
      'vue/no-mutating-props': 'off',
      'vue/attribute-hyphenation': 'off',
    },
  },
]
